<template>
  <div class="search">
    <van-nav-bar title="搜索中心" left-arrow @click-left="$router.back()"></van-nav-bar>

     <!-- 搜索框 -->
     <van-search
      v-model="keyword"
      show-action
      shape="round"
      placeholder="请输入搜索关键词"
      @input="onInput(keyword)"
    >
      <template #action>
        <div @click="onSearch(keyword)">搜索</div>
      </template>
    </van-search>

<van-empty image="search" description="无相关内容" v-show="sugList.length < 1"/>
    <!-- 推荐 -->
<van-cell-group v-if="keyword">
    <!-- :title="item" 给cell单元格设置内容不会生效 -->
  <van-cell
    @click="onSearch(item)"
    icon="search"
    v-for="(item, index) in sugList"
    :key="index"
    >
      <!-- 去掉title，在此包裹内容 -->
      <span v-html="highLight(item, keyword)"></span>
  </van-cell>
</van-cell-group>

    <!-- 历史记录 -->
    <van-cell-group v-else>
      <van-cell title="历史记录"></van-cell>
      <van-cell v-for="(item, index) in history" :key="index" :title="item">
        <van-icon name="close" @click.stop="del(item)" />
      </van-cell>
    </van-cell-group>
  </div>
</template>

<script>
import { getSuggest } from '@/api/search'
import { getSearchHistory, setSearchHistory } from '@/utils/storage'

export default {
  name: 'Search',
  data () {
    return {
      keyword: '',
      sugList: [], // 匹配列表
      history: getSearchHistory() || [] // 历史记录
    }
  },
  methods: {
    // 搜索跳转
    async onSearch(keyword) {
      // 首先判断输入内容是否为空
      if (!keyword) return this.$toast('请输入内容')
      // 通过搜索内容发送请求获取结果
      const res = await getSuggest(keyword)
      // 将匹配的内容存入数组
      this.sugList = res.data.options
      console.log(this.sugList)

      // 当搜索内容与历史记录匹配时，先删除已有的搜索记录，再头部添加该记录
      this.history = this.history.filter(item => item !== keyword)
      // 搜索内容头部添加到历史搜素记录
      this.history.unshift(keyword)

      // 本地存储搜索记录
      setSearchHistory(this.history)

      // 跳转搜索结果页面
      this.$router.push({
        path: '/search/result',
        query: {
          keyword
        }
      })
    },
    // 输入触发联想关键词
    onInput(keyword) {
      clearTimeout(this.tiemrId)

      this.tiemrId = setTimeout(async () => {
        if (!keyword) {
          return
        }
        // // 通过搜索内容发送请求获取结果
        const res = await getSuggest(keyword)
        // // 将匹配的内容存入数组
        this.sugList = res.data.options
        console.log(this.sugList)
      }, 1000)
    },
    // 删除历史记录
    del(obj) {
      this.history = this.history.filter(item => item !== obj)
      // 并保存到本地存储
      setSearchHistory(this.history)
    },

    // 参数1：完整字符串  参数2：高亮的关键字
    // 关键字高亮
    highLight (str, keyword) {
      const reg = new RegExp(this.keyword, 'gi')
      return str.replace(reg, match => {
        return `<span style="color: red;">${match}</span>`
      })
    }
  }
}
</script>

<style></style>
